#include <bits/stdc++.h>
using namespace std;
/*
看这个算式：

☆☆☆ + ☆☆☆ = ☆☆☆

如果每个五角星代表 111 ~ 999 的不同的数字。

这个算式有多少种可能的正确填写方法？
173 + 286 = 459
295 + 173 = 468
173 + 295 = 468
183 + 492 = 675
[copy]

以上都是正确的填写法！

注意： 111+222=333 是错误的填写法！ 因为每个数字必须是不同的！ 也就是说：111 ~ 999中的所有数字，每个必须出现且仅出现一次！

注意：不包括数字 “0”“0”“0”！

注意： 满足加法交换率的式子算两种不同的答案。 所以答案肯定是个偶数！
*/
int a[10];
bool check(int x){
  //检查三位数是否符合标准
  if (x>=1000||x<=100) return false;
  // 
  int bit = x%10;x/=10; //拿出个位数 
  int ten = x%10;x/=10; //拿出十位数
  int hun = x%10;x/=10; //拿出百位数
  if (hun == ten || ten == bit || hun == bit ) return false; //无重复
  if (hun*ten*bit==0) return false; //不能有0
  if (a[bit]>0||a[ten]>0||a[hun]>0) return false;

  a[bit] = 1;
  a[ten] = 1;
  a[hun] = 1;
  return true;
}
void clear(int x){
 int bit = x%10;x/=10; //拿出个位数 
  int ten = x%10;x/=10; //拿出十位数
  int hun = x%10;x/=10; //拿出百位数
   a[bit] =0;
  a[ten] = 0;
  a[hun] = 0;
}

int main()
{
  int sum = 0;
  for(int begin = 123;begin<987;begin++){
    for(int end = 122;end<=987-begin;end++){
      int final = begin+end;
      if (check(final)&&check(begin)&&check(end))
        {
         // cout<<begin<<"+"<<end<<" = "<<final<<endl;
          sum++;
        }
        clear(final);//每次搜索都要记得清除标记
        clear(begin);
        clear(end);
    }
  }
 cout<<sum;
  return 0;
}
// int main() {
//   /*打表(直接输出结果):*/
//   cout<<336<<endl;
//   return 0;
// }
